对数组中的元素进行排序是非常基础的问题,从现有的众多排序算法中任选一种即可实现。但是如果要求排序后同时返回新的(有序)数组中每个元素在旧的(未排序)数组中之原始位置,问题可能就变得有些棘手了。
例如假设有一个数组如下:
[2, 30, 1, 5, 12, 8, 6]
排序(从小到大)后可得新的数组如下:
[1, 2, 5, 6, 8, 12, 30]
那么对于新数组中值等于1的元素而言,其在原数组中的位置就应该是2(注意数组下标从0开始计数)。
当然,最straightforward的想法就是回到原数组中去search,从而获得元素在其中的位置。但这样做的代价显然有点高,比较对每个元素都做一次搜索还是相当浪费的。从执行时间复杂度来看,有没有更好的办法呢?所以更常被使用的方法是使用一个结构体数组,例如下面这种形式: